import router from '@/router/index';
import axios from 'axios';
/**
 * 创建axios实例 http://www.axios-js.com/zh-cn/
 */

const ENV = process.env.NODE_ENV;
const host =
  ENV === 'development' ? 'http://127.0.0.1:3000' : 'http://127.0.0.1';

const service = axios.create({
  baseURL: host,
  timeout: '3000',
});

/**
 * 请求拦截 请求和登录 不需要拦截
 */
service.interceptors.request.use((config) => {
  if (config.url.indexOf('register') < 0 && config.url.indexOf('login') < 0) {
    // 此次请求不是注册也不是登录 会将当前token值传给后端
    config.headers.authorization = localStorage.getItem('token'); // 将token放置在header
  }
  return config;
});

/**
 * 响应拦截
 */

service.interceptors.response.use((res) => {
  //解构赋值
  const { code, data, message } = res.data;
  // console.log(message);
  if (code === 0) {
    // 若是响应码为0 表示正常响应
    if (message) {
      ElMessage({
        message: message,
        type: 'success',
      });
    }
    return data;
  } else {
    // console.log(data); 验证解构赋值 若左边 多于右边 那么多出来的那项值 为 'undefined'
    ElMessage({
      message: message,
      type: 'error',
      showClose: true,
    });
  }
  if (message === '身份认证失败') {
    router.push('/login');
  }
});

/**
 * 封装请求函数
 */

const request = (options) => {
  if (options.method === 'get') {
    //若是get请求则添加一个变量params 并且将参数给params
    options.params = options.data;
  }
  // 最终由service发送请求
  return service(options);
};

export default request;
